import pako from 'pako'
import Base64 from 'Base64'

/**
 * 通过gzip将原始字符串压缩为base64字符串
 * @param {String} strData
 * @returns
 */
export function gzip (strData) {
  return Base64.btoa(ut8ArrToString(pako.gzip(strData)))
}

/**
 * 通过ungzip将base64字符串解压缩为原始字符串
 * @param {String} strData
 * @returns
 */
export function ungzip (strData) {
  return pako.ungzip(stringToUt8Arr(Base64.atob(strData)), { to: 'string' })
}

/**
 * 将Unit8Array数据转化为字符串（编码）
 * @param {Uint8Array} unit8Arr
 * @returns
 */
function ut8ArrToString (unit8Arr) {
  let dataString = ''
  for (let i = 0; i < unit8Arr.length; i++) {
    dataString += String.fromCharCode(unit8Arr[i])
  }
  return encodeURIComponent(dataString)
}

/**
 * 将编码过的字符串转化为Unit8Array数据
 * @param {String} str
 * @returns
 */
function stringToUt8Arr (str) {
  const dStr = decodeURIComponent(str)
  const arr = []
  for (let i = 0, j = dStr.length; i < j; ++i) {
    arr.push(dStr.charCodeAt(i))
  }
  return new Uint8Array(arr)
}
